﻿using System;
using System.Drawing;
using System.Windows.Forms;
using BadgeManager.Controller;
using BadgeManager.Model;

namespace Badge_Manager.View
{
    public partial class frmWizard : Form
    {
        private Passaggi PassaggioCorrente;

        #region "Oggetti per il salvataggio finale"

        public Attivita Attivita { get; set; }

        #endregion "Oggetti per il salvataggio finale"

        public enum Passaggi
        {
            psgCorsoAttivita = 1,
            psgDettagli = 2,
            psgAlunni = 3
        }

        public enum Risultato
        {
            BuonFine,
            Errore,
            CampiNonValidi
        }

        public frmWizard()
        {
            InitializeComponent();
            Attivita = new BadgeManager.Model.Attivita();
            Attivita.Corso = new Corso();
            Attivita.Stanza = new Stanza();
            ImpostaPassaggio(Passaggi.psgCorsoAttivita);
        }

        private void cmdAnnulla_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void ImpostaTitoloPassaggio(Passaggi Passaggio)
        {
            switch (Passaggio)
            {
                case Passaggi.psgCorsoAttivita:
                    lblTitoloPassaggio.Text = ""
                        + "Definizione del Corso e Attività";
                    break;
                case Passaggi.psgDettagli:
                    lblTitoloPassaggio.Text = ""
                        + "Giorni e dettagli";
                    break;
                case Passaggi.psgAlunni:
                    lblTitoloPassaggio.Text = ""
                        + "Inserimento Alunni";
                    break;
            }
        }

        private void VisualizzaPassaggio(Passaggi Passaggio)
        {
            foreach (UserControl item in pnlContainer.Controls)
            {
                if (item is UserControl)
                    item.Visible = false;
            }
            cmdAvanti.Text = "Avanti >>";
            switch (Passaggio)
            {
                case Passaggi.psgCorsoAttivita:
                    ctrlCorsoAttivita.Visible = true;
                    ctrlCorsoAttivita.BringToFront();
                    break;
                case Passaggi.psgDettagli:
                    ctrlDettaglioAttivita.Visible = true;
                    ctrlDettaglioAttivita.BringToFront();
                    break;
                case Passaggi.psgAlunni:
                    cmdAvanti.Text = "Fine";
                    ctrlAlunni.Visible = true;
                    ctrlAlunni.BringToFront();
                    break;
            }
        }

        private void ImpostaPassaggio(Passaggi Passaggio)
        {
            foreach (Label item in pnlPassaggi.Controls)
            {
                if (item is Label)
                {
                    if (item.Name == Passaggio.ToString())
                    {
                        item.ForeColor = Color.Black;
                        item.BackColor = System.Drawing.SystemColors.Control;
                        PassaggioCorrente = Passaggio;
                        ImpostaTitoloPassaggio(Passaggio);
                        VisualizzaPassaggio(Passaggio);
                    }
                    else
                    {
                        item.ForeColor = Color.White;
                        item.BackColor = pnlImmagine.BackColor;
                    }
                }
            }
        }

        private void ProssimoPassaggio()
        {
            foreach (Label item in pnlPassaggi.Controls)
            {
                if (item is Label)
                {
                    if (Convert.ToInt16(PassaggioCorrente) == 1)
                    {
                        if (SalvaPrimoPassaggio() == Risultato.BuonFine)
                        {
                            if (this.Attivita != null && this.Attivita.SenzaFine == false)
                            {
                                PassaggioCorrente = Passaggi.psgDettagli;
                            }
                            else
                            {
                                ctrlAlunni.Inizializza(this);
                                PassaggioCorrente = Passaggi.psgAlunni;
                            }
                            break;
                        }
                        else
                            return;
                    }
                    else if (Convert.ToInt16(PassaggioCorrente) == 2)
                    {
                        if (SalvaSecondoPassaggio() == Risultato.BuonFine)
                        {
                            ctrlAlunni.Inizializza(this);
                            PassaggioCorrente = Passaggi.psgAlunni;
                            break;
                        }
                        else
                            return;
                    }
                    else if (Convert.ToInt16(PassaggioCorrente) == 3)
                    {
                        ctrlWizard wiz = new ctrlWizard();
                        if (SalvaTerzoPassaggio() == Risultato.BuonFine)
                        {
                            if (wiz.SalvaTutto(Attivita) == BadgeManager.Controller.ctrlWizard.Risultato.BuonFine)
                            {
                                this.Close();
                                return;
                            }
                        }
                    }
                }
            }
            ImpostaPassaggio(PassaggioCorrente);
        }

        private void PrecedentePassaggio()
        {
            foreach (Label item in pnlPassaggi.Controls)
            {
                if (item is Label)
                {
                    if (Convert.ToInt16(PassaggioCorrente) == 2)
                    {
                        this.Attivita.DettagliAttivita = null;
                        PassaggioCorrente = Passaggi.psgCorsoAttivita;
                        break;
                    }
                    else if (Convert.ToInt16(PassaggioCorrente) == 3)
                    {
                        if (this.Attivita != null && this.Attivita.SenzaFine == true)
                        {
                            PassaggioCorrente = Passaggi.psgCorsoAttivita;
                            break;
                        }
                        PassaggioCorrente = Passaggi.psgDettagli;
                        break;
                    }
                }
            }
            ImpostaPassaggio(PassaggioCorrente);
        }

        private void cmdAvanti_Click(object sender, EventArgs e)
        {
            if (PassaggioCorrente == Passaggi.psgDettagli)
                if (!ctrlDettaglioAttivita.Controlla())
                    return;
            ProssimoPassaggio();
        }

        private void cmdIndietro_Click(object sender, EventArgs e)
        {
            PrecedentePassaggio();
        }

        private Risultato SalvaPrimoPassaggio()
        {
            //1.MEMORIZZARE CORSO,AULA E ATTIVITA
            //2.MEMORIZZARE DETTAGLIO ATTIVITA
            //3.MEMORIZZARE LISTA ALUNNI

            #region "1"

            //1
            Controlli.ctrlWizard1.Risultato result = ctrlCorsoAttivita.Memorizza(this);

            if (result == Controlli.ctrlWizard1.Risultato.BuonFine ||
                result == Controlli.ctrlWizard1.Risultato.AttivitaFinita)
            {
                //this.Corso = ctrlCorsoAttivita.Corso;
                //this.Stanza = ctrlCorsoAttivita.Stanza;
                //this.Attivita = ctrlCorsoAttivita.Attivita;

                if (Attivita.SenzaFine == false)//se non è indet inizializza il dettaglio
                {
                    ctrlDettaglioAttivita.Inizalizza(this);
                }
            }
            else
                return Risultato.Errore; //sollevare un eccezione
            //FINE 1

            #endregion "1"

            return Risultato.BuonFine;
        }

        private Risultato SalvaSecondoPassaggio()
        {
            //1.MEMORIZZARE CORSO,AULA E ATTIVITA
            //2.MEMORIZZARE DETTAGLIO ATTIVITA
            //3.MEMORIZZARE LISTA ALUNNI

            #region "2"

            if (ctrlDettaglioAttivita.Memorizza(this) ==
                Controlli.ctrlWizard2.Risultato.BuonFine)
            {
                if (Attivita.DettagliAttivita.Count == 0)
                {
                    MessageBox.Show("L'elenco dei giorni del dettaglio corso non è completo o non è stato inizializzato");
                    return Risultato.CampiNonValidi;
                }
            }
            else
                return Risultato.Errore;

            #endregion "2"

            return Risultato.BuonFine;
        }

        private Risultato SalvaTerzoPassaggio()
        {
            //1.MEMORIZZARE CORSO,AULA E ATTIVITA
            //2.MEMORIZZARE DETTAGLIO ATTIVITA
            //3.MEMORIZZARE LISTA ALUNNI

            #region "3"

            if (ctrlAlunni.Memorizza(this) ==
                Controlli.ctrlWizard2.Risultato.BuonFine)
            {
                return Risultato.BuonFine;
            }
            else
                return Risultato.Errore;

            #endregion "3"
        }
    }
}